package run.bottle.shiro.service.dynamicquery;

import java.util.List;

/**
 * 扩展SpringDataJpa, 支持动态jpql/nativesql查询并支持分页查询
 */
public interface DynamicQuery {
    /**
     * 保存
     * @param entity
     */
    void save(Object entity);

    /**
     * 更新
     * @param entity
     */
    void update(Object entity);

    /**
     * 执行nativeSql的update,delete操作
     * @param nativeSql
     * @param params
     * @return
     */
    int nativeExecuteUpdate(String nativeSql, Object... params);

    /**
     * 执行nativeSql统计查询
     * @param nativeSql
     * @param params 占位符参数(例如?1)绑定的参数值
     * @return 统计条数
     */
    Long nativeQueryCount(String nativeSql, Object... params);

    /**
     * 执行nativeSql查询一行
     * @param resultClass 查询结果类型
     * @param nativeSql
     * @param params 占位符参数(例如?1)绑定的参数值
     * @return
     */
    <T> T nativeQuerySingleResult(Class<T> resultClass, String nativeSql, Object... params);

    /**
     * 执行nativeSql查询 List<Object[]>
     * @param nativeSql
     * @param params 占位符参数(例如?1)绑定的参数值
     * @return
     */
    <T> List<T> query(String nativeSql, Object... params);

    /**
     * 执行nativeSql查询
     * @param resultClass
     * @param nativeSql
     * @param params 占位符参数(例如?1)绑定的参数值
     * @return
     */
    <T> List<T> query(Class<T> resultClass, String nativeSql, Object... params);
}
